package com.zzyl.common.ai;

import com.baidubce.qianfan.Qianfan;
import com.baidubce.qianfan.core.auth.Auth;
import com.baidubce.qianfan.model.chat.ChatResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class AIModelInvoker {

    @Autowired
    private BaiduAIProperties baiduAIProperties;

    /**
     *
     * @param prompt 上下文 描述信息
     * @return 千帆模型返回的数据
     */
    public String qianfanInvoker(String prompt) {
        System.out.println(prompt);
        // 创建千帆模型对象。需要3个参数，参数1是 写死的表示认证方式，参数2是我们创建千帆应用的key,参数3是我们创建千帆应用的密钥
        Qianfan qianfan = new Qianfan(Auth.TYPE_OAUTH, baiduAIProperties.getAccessKey(), baiduAIProperties.getSecretKey());
        //  利用千帆模型对象，创建1个 聊天对象
        ChatResponse response = qianfan.chatCompletion()
                // 设置我们和 千帆模型 的 模式版本号
                .model(baiduAIProperties.getQianfanModel())
                //  创建上下文
                .addMessage("user", prompt)
                // 给千帆模型 设置 回答答案的精准度，(0-1] 值越大精准度越低，值越小精准度越高，一般0.7,0.8就够用了
                .temperature(0.7)
                //  设置千帆模型 给我们回答答案的 最多字数
                .maxOutputTokens(2000)
                // 设置千帆模型 给我们返回数据的数据类型，text 是文本，默认是文本格式，json_object是json 类型
                .responseFormat("json_object")
                //  执行这次调用
                .execute();
        // 得到千帆模型 返回的数据
        String result = response.getResult();
        System.out.println(result);

        return result;
    }

}